package adapter;
import akka.actor.*;
import models.msgs.*;
import models.*;

import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;

/**
 * Klasa obslugujaca komunikaty wyslane przez serwer podczas uzytkowania lobby.
 * @author Artur Smolbowski
 */
public class ServerSTaskController {
  /**
   * Referencja do klasy glownej okna.
   */
  private ActorRef table;
  private ActorRef client;
  private String clientName;
  /**
   * Konstruktor klasy glownej.
   * @param table Referencja do klasy glownej.
   */
  ServerSTaskController(ActorRef table, ActorRef client, String clientName) {
    this.table=table;
    this.client=client;
    this.clientName=clientName;
  }
  /**
   * Metoda obslugujaca komunikat serwera, podajacego wszystkie dostepne gry.
   * @param task Zapytanie od serwera.
   */
  public void S_REFRESH(String task) {
    String ListaGier="<br />";
	task=task.substring(10);
    int numberOfGames=0;
    try{ numberOfGames=Integer.parseInt(task.substring(0, task.indexOf("_"))); }
    catch(StringIndexOutOfBoundsException e) {}
    if(numberOfGames>0) {
      task=task.substring(task.indexOf("_")+2);
      String s="";
      for(int i=0;i<numberOfGames;i++) {
        s="ID "+task.substring(0, task.indexOf("_"))+": ";
        task=task.substring(task.indexOf("_")+1);
        s+=(i+1)+" GAME:  Player: "+task.substring(0, task.indexOf("_"))+"   ";
        task=task.substring(task.indexOf("_")+1);
        s+="Boty: "+task.substring(0, task.indexOf("]"));
        ListaGier+=s+"<br />";
        try{ task=task.substring(task.indexOf("]")+3); }
        catch( IndexOutOfBoundsException e ) { }
      }

      table.tell(new Result(ListaGier,"Table"), client);
    }
    else
      table.tell(new Result("Brak gier","Table"), client);
  }
  /**
   * Metoda obslugujaca komunikat nadania id graczowi.
   * @param task Zapytanie od serwera.
   */
  public void S_ID(String task) {
    task=task.substring(5);
    table.tell(new IDGracza(task,clientName), client);
  }
  /**
   * Metoda obslugujaca komunikaty bledow wyslane przez serwer.
   * @param LastTask Ostatni komunikat wyslany do serwera.
   */
  public void S_ERROR(String LastTask) {
	LastTask=LastTask.substring(LastTask.indexOf("_")+1);
    try{ LastTask=LastTask.substring(0, LastTask.indexOf("_")); } catch(StringIndexOutOfBoundsException e) {}

    switch(LastTask) {
      case "JOIN":    table.tell(new Result("Nie udalo sie dolaczyc do gry","Table"), client);
                      break;
      case "NEWGAME": table.tell(new Result("Nie udalo sie utworzyc gry","Table"), client);
                      break;
    }
  }

  public void S_CREATE(String task) {
    table.tell(new IDGracza("0", clientName), client);
  }
}
